﻿// CreateProcess.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <stdio.h>
#include <Windows.h>

/*
进程：
		进程是指正在运行的程序的实例。每个进程都有自己的内存空间和系统资源，包括CPU时间、文件描述符、网络连接等。在操作系统中，进程是程序执行的基本单位，多个进程之间可以并行运行，相互独立，互不干扰。
		每个进程都有自己的进程ID，可以通过进程ID来唯一标识一个进程。
	运行中的程序
	源程序文件  ---->   可执行程序文件(*.exe)
	进程的组成：
		代码  内存  CPU时间片  时钟  优先级  其他资源(图片文件 硬件设备...)
	线程没有资源
		同一个进程内的所有线程共用这个进程的所有资源
	进程的调度：专门有套系统来管理当前的所有进程
		多任务操作系统
		多种调度方式：
			1. 绝对公平机制
			2. 优先机制

os资源管理的基本单位	     进程			一户
os运行调度的基本单位		 线程			个人

	进程的状态：
		运行时  等待  挂起  睡眠  死亡  僵尸

1. 如何创建进程
	创建进程的进程   父进程
	被创建的进程     子进程

	根进程     祖先

	操作系统启动的时候   先创建一个根进程
	根进程 创建了一些 (内核)进程 这些进程又创建一些进程

	程序员如何创建进程？
		1. 委托os创建      注册表（开机自启）
		2. 编译器    点击运行
		3. 双击      右键选择运行
		4. 运行窗口
		5. 命令行启动
		6. 程序中如何启动进程
			6.1  调用  system函数   命令行启动
				ctrl + C  干掉命令行上的进程
			6.2  windowsAPI 启动进程   CreateProcess


前台进程
后台进程

	ReadProcessMemory
	WriteProcessMemory

*/

int main()
{
    STARTUPINFO startUpInfo = { 0 };
    PROCESS_INFORMATION info = { 0 };
    startUpInfo.lpTitle = new char[256];
    strcpy(startUpInfo.lpTitle, "GDI");
    BOOL ret = CreateProcess("D:\\vs-code\\windows\\progress\\CreateProcess\\GDI_绘图.exe",
        NULL, NULL, NULL, false, NULL, NULL, NULL,
        &startUpInfo, &info);
   if (ret)
   {
       printf("创建进程成功\ndwProcessId: %d\ndwThreadId:%d\nProcess:%d\nThread:%d\n",
           info.dwProcessId, info.dwThreadId, info.hProcess, info.hThread);

   }
   else
   {
       printf("创建失败\n");
   }




    return 0;
}


